package _04io;

import java.io.*;
import java.util.Arrays;

/**
 * @description:
 * @author: songtao@cskaoyan.onaliyun.com
 **/

/*
1.在一个磁盘的文件里保存26个英文小写字母（乱序），将他们读入内存中，进行排序，
把排好顺序的数再重新追加写到磁盘的该文件中。
 */
public class Work6 {
    public static void main(String[] args) {
        // method1  使用的是字节流
        method1();

        // method2 使用的是字符流
        method2();

    }

    private static void method1() {
        // try-with-resources
        try (FileInputStream in = new FileInputStream("b.txt");
             FileOutputStream out = new FileOutputStream("b.txt", true)) {
            // 创建字节数组
            byte[] bytes = new byte[26];
            // 把数据读入字节数组
            int readCount = in.read(bytes);
            // 对字节数组进行排序
            Arrays.sort(bytes);
            // 字节数组转为字符串
            String s = new String(bytes, 0, readCount);
            // 追加写入
            out.write(s.getBytes());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


    }

    private static void method2() {
        // try-catch-finally
        BufferedReader br =null;
        FileWriter fileWriter = null;
        try {

            br = new BufferedReader(new FileReader("b.txt"));
            fileWriter = new FileWriter("b.txt", true);
            // 读取一行数据
            String s = br.readLine();
            // 字符串转为字符数组
            char[] chars = s.toCharArray();
            // 排序
            Arrays.sort(chars);
            // 生成排序后新的字符串
            String newStr = new String(chars);
            fileWriter.write(newStr);
            // 记得刷新
            fileWriter.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            // 判断是否为null
            if (fileWriter != null) {
                try {
                    fileWriter.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (br != null) {

                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
